//package cn.xinfei.xdecision.mq;
//
//import cn.xinfei.xdecision.XDecisionEngineServerApplicationTest;
//import lombok.extern.slf4j.Slf4j;
//import org.junit.Test;
//import org.springframework.amqp.core.Message;
//import org.springframework.amqp.core.MessageBuilder;
//import org.springframework.amqp.core.MessageDeliveryMode;
//import org.springframework.amqp.rabbit.connection.CorrelationData;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import java.nio.charset.StandardCharsets;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.UUID;
//
//@Slf4j
//public class RabbitProducerTest2 extends XDecisionEngineServerApplicationTest {
//
//
//    @Autowired
//    private RabbitTemplate rabbitTemplate;
//
//    String exchange = "device_input";
//    String queue = "async_message_input";
//
//    @Test
//    public void TestMessageAck() {
//        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
//        // 2.2.准备ConfirmCallback
//        correlationData.getFuture().addCallback(result -> {
//            // 判断结果
//            if (result.isAck()) {
//                // ACK
//                log.debug("消息成功投递到交换机！消息ID: {}", correlationData.getId());
//            } else {
//                // NACK
//                log.error("消息投递到交换机失败！消息ID：{}", correlationData.getId());
//                // 重发消息
//            }
//        }, ex -> {
//            // 记录日志
//            log.error("消息发送失败！", ex);
//            // 重发消息
//        });
//        String messageId = String.valueOf(UUID.randomUUID());
//        String messageData = "message: non-existent-exchange test message ";
//        String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//        Map<String, Object> map = new HashMap<>();
//        map.put("messageId", messageId);
//        map.put("messageData", messageData);
//        map.put("createTime", createTime);
//        rabbitTemplate.convertAndSend("non-existent-exchange", "#", map,correlationData);
//
//        try {
//            Thread.sleep(10000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//
//    }
//    @Test
//    public void TestMessageAck2() {
//        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
//        // 2.2.准备ConfirmCallback
//        correlationData.getFuture().addCallback(result -> {
//            // 判断结果
//            if (result.isAck()) {
//                // ACK
//                log.debug("消息成功投递到交换机！消息ID: {}", correlationData.getId());
//            } else {
//                // NACK
//                log.error("消息投递到交换机失败！消息ID：{}", correlationData.getId());
//                // 重发消息
//            }
//        }, ex -> {
//            // 记录日志
//            log.error("消息发送失败！", ex);
//            // 重发消息
//        });
//        String messageId = String.valueOf(UUID.randomUUID());
//        String messageData = "message: lonelyDirectExchange test message ";
//        String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//        Map<String, Object> map = new HashMap<>();
//        map.put("messageId", messageId);
//        map.put("messageData", messageData);
//        map.put("createTime", createTime);
//        rabbitTemplate.convertAndSend(exchange, "TestDirectRouting", map,correlationData);
//
//        try {
//            Thread.sleep(10000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//    }
//
//    @Test
//    public void TestMessageAck3() {
//        CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
//        // 2.2.准备ConfirmCallback
//        correlationData.getFuture().addCallback(result -> {
//            // 判断结果
//            if (result.isAck()) {
//                // ACK
//                log.debug("消息成功投递到交换机！消息ID: {}", correlationData.getId());
//            } else {
//                // NACK
//                log.error("消息投递到交换机失败！消息ID：{}", correlationData.getId());
//                // 重发消息
//            }
//        }, ex -> {
//            // 记录日志
//            log.error("消息发送失败！", ex);
//            // 重发消息
//        });
//        String messageId = String.valueOf(UUID.randomUUID());
//        String messageData = "message: lonelyDirectExchange test message ";
//        String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//        Map<String, Object> map = new HashMap<>();
//        map.put("messageId", messageId);
//        map.put("messageData", messageData);
//        map.put("createTime", createTime);
//        rabbitTemplate.convertAndSend(exchange, "#", map,correlationData);
//        try {
//            Thread.sleep(10000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//    }
//
//}